![]() |
#3 |
Участник
|
Не знаю,как в цитриксе, а в WTS можно сделать так
X++: static void WTSClientAddress(Args _args) { dll dll = new Dll("Wtsapi32.dll"); DLLFunction WTSOpenServer = new DLLFunction(dll, "WTSOpenServerA"); DLLFunction WTSCloseServer = new DLLFunction(dll, "WTSCloseServer"); DLLFunction WTSQuerySessionInformation = new DLLFunction(dll, "WTSQuerySessionInformationA"); DLLFunction WTSFreeMemory = new DLLFunction(dll, "WTSFreeMemory"); int handle; Binary ptr = new Binary(4); Binary buf; Binary size = new Binary(4); int i; #define.WTS_CURRENT_SERVER_HANDLE (0) #define.WTS_CURRENT_SESSION (-1) #define.WTSClientAddress(14) #define.byteOne (4+2+0) #define.byteTwo (4+2+1) #define.byteThree (4+2+2) #define.byteFour (4+2+3) ; WTSOpenServer.arg(ExtTypes::DWord); WTSOpenServer.returns(ExtTypes::DWord); handle = WTSOpenServer.call(#WTS_CURRENT_SERVER_HANDLE); if (handle) { WTSQuerySessionInformation.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::Pointer); WTSQuerySessionInformation.returns(ExtTypes::DWord); if (WTSQuerySessionInformation.call(handle, #WTS_CURRENT_SESSION, #WTSClientAddress, ptr, size) && size.dWord(0) > 0) { buf = new Binary(size.dWord(0)); buf.attach(ptr.dWord(0), size.dWord(0)); if (buf.dWord(0) == 2) { info(strfmt("%1.%2.%3.%4", buf.byte(#byteOne), buf.byte(#byteTwo), buf.byte(#byteThree), buf.byte(#byteFour))); } WTSFreeMemory.arg(ExtTypes::DWord); WTSFreeMemory.call(ptr.dWord(0)); } WTSCloseServer.arg(ExtTypes::DWord); WTSCloseServer.call(handle); } }
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Logger (5), aidsua (1). |