我正在开发.Net中的控制台应用程序,我想根据应用程序从cmd.exe或explorer.exe启动的信息稍微改变一个行为。 可能吗?
从PathTooLongException中检索path信息
以编程方式调用SendTo
防止Windows资源pipe理器干扰目录操作
在Adobe AIR和.NET之间发送“Windows消息”是否有体面的方式,还是需要使用套接字?
Process this_process = Process.GetCurrentProcess(); int parent_pid = 0; using (ManagementObject MgmtObj = new ManagementObject("win32_process.handle='" + this_process.Id.ToString() + "'")) { MgmtObj.Get(); parent_pid = Convert.ToInt32(MgmtObj["ParentProcessId"]); } string parent_process_name = Process.GetProcessById(parent_pid).ProcessName;
Createtoolhelp32Snapshot函数有一个Process32First方法,将允许您读取一个PROCESSENTRY32结构 。 该结构有一个属性,将得到你想要的信息:
th32ParentProcessID – 创建此进程(其父进程)的进程的标识。
本文将帮助您开始使用ToolHelpSnapshot函数:
http://www.codeproject.com/KB/cs/IsApplicationRunning.aspx
ToolHelp / ManagementObject方法的一个问题是父进程可能已经退出。
GetStartupInfo Win32函数(如果没有.NET等价物,使用PInvoke)填充包含窗口标题的结构。 对于Win32控制台应用程序“app.exe”,当从cmd启动时,该标题字符串是“app”,从explorer(或VS调试器)启动时,该标题字符串是“c: full path to app.exe”。
当然,这是一个黑客(可能会改变其他版本等)。
#define WIN32_LEAN_AND_MEAN #include <windows.h> int main() { STARTUPINFO si; GetStartupInfo(&si); MessageBox(NULL,si.lpTitle,NULL,MB_OK); return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。