代码如下:
[DllImport("kernel32")]
private static extern bool ProcessIdToSessionId(int pid,int sid);我用远程桌面控制另一台机器,然后在另一台机器里打开了一个应用程序.
在任务管理器里看,这个应用程序的会话ID是1,即远程会话.
但是,我调用ProcessIdToSessionId函数,它始终返回false,sid的值也始终是0.
系统都是Windows 2003
请大侠帮忙看看..
[DllImport("kernel32")]
private static extern bool ProcessIdToSessionId(int pid,int sid);我用远程桌面控制另一台机器,然后在另一台机器里打开了一个应用程序.
在任务管理器里看,这个应用程序的会话ID是1,即远程会话.
但是,我调用ProcessIdToSessionId函数,它始终返回false,sid的值也始终是0.
系统都是Windows 2003
请大侠帮忙看看..
解决方案 »
- 怎么把".\a.h",".\config\b.h"变成".\\a.h"和".\\config\\b.h"?
- 这个的结果应该是7嘛,为什么是8呢?
- 请问下vs2008 自带的Ajax 和 Extjs 在客户端展现各自的优缺点是什么呢?
- 关于用winform登陆web网站的问题??
- dropdown事件,急
- dll文件重写问题
- 数据库统计问题
- Repeater中怎样根据数据库中列的值不同,而有相应的显示啊,例如,是1就显示“隐藏”,是2就显示“显示”啊
- [分享]分享一个算法,将不同长度的数组中各取一个元素,列出所有可能的组合
- C#和Matlab混合编程生成的DLL在控制台程序中运行正常,但放到REST WCF中就报错:MWArray TypeInitializationExcepti
- 在DLL文件中有int __stdcall 好象是个修饰函数指针,如何在C#中调用
- 为了感谢 Neil198(打豆豆)老大,再次散分。。。~~
用GetLastError看下系统错误代码
改成
[DllImport("kernel32")]
private static extern bool ProcessIdToSessionId(int pid,out int sid);
试试
BOOL ProcessIdToSessionId(
__in DWORD dwProcessId,
__out DWORD* pSessionId
);
针.对应的C#声明就是out或ref.而C++声明那里明确的注明
了是__out所以使用out.如果函数自身要用到这个参数的值做
输入同时用它做输出的话,则改用ref.
要用Marshal就很烦了.首先你得分配一个int大小的空间.获得
对应的IntPtr,然后把这个指针传过去.接着等函数返回后再用
Marshal从这个指针处读出对应的int,再释放掉申请的内存.要多
敲多少行代码啊...
[DllImport("kernel32")]
private static extern bool ProcessIdToSessionId(int pid,out int sid);
我调用的时候:
...
if(ProcessIdToSessionId(pid,sid))
{}
...
编译不通过,错误提示为:
1."参数'2' : 无法从'int'转换为'out int'"
2."与'Process.Form1.ProcessIdToSessionId(int, out int)'最匹配的重载方法具有一些无效参数"
GetLastError好像是System.Web下的吧?我的程序都是在System.Win下,能用不?
高手指教!!
{} 《《这句有点问题if(ProcessIdToSessionId(pid,out sid))
{} GetLastError是winform下的^^
非常感谢hilarymoggy,ChrisAK帮忙...