Articles of .net

各种剪贴板/拖放格式是什么意思?

我正在玩拖放。 我做了一个示例应用程序,并从我的音乐文件夹中删除一个文件到我的应用程序 以下是e.Data.GetFormats()返回的内容: Shell IDList Array UsingDefaultDragImage DragImageBits DragContext DragSourceHelperFlags InShellDragLoop FileDrop FileNameW 文件名 IsShowingLayered DragWindow IsComputingImage DropDescription DisableDragText ComputedDragImage IsShowingText 这些都意味着什么,以及如何解码和使用它们? 谷歌search他们每个人没有得到任何有用的信息。

.NET中安全身份的本地化

我正在寻找在.NET中实现一个命名pipe道的服务/客户端通信,并遇到这个代码 ,当初始化pipe道的服务器端必须build立一个pipe道的安全描述符。 他们这样做: PipeSecurity pipeSecurity = new PipeSecurity(); // Allow Everyone read and write access to the pipe. pipeSecurity.SetAccessRule(new PipeAccessRule("Authenticated Users", PipeAccessRights.ReadWrite, AccessControlType.Allow)); // Allow the Administrators group full access to the pipe. pipeSecurity.SetAccessRule(new PipeAccessRule("Administrators", PipeAccessRights.FullControl, AccessControlType.Allow)); 但是我正在看,而且我很担心指定SID作为string或Authenticated Users和Administrators部分。 有什么保证他们会用中文或其他语言来称呼他们呢?

为.Net下的低完整性进程添加写访问权限

我正在创build一个FileSecurity文件创build应该有一个写访问低廉的完整性过程。 FileSecurity fileAcl = new FileSecurity(); // add everyone IdentityReference sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null); FileSystemAccessRule rule = new FileSystemAccessRule(sid, FileSystemRights.FullControl, AccessControlType.Allow); fileAcl.AddAccessRule(rule); // add restricted sid = new SecurityIdentifier(WellKnownSidType.RestrictedCodeSid, null); rule = new FileSystemAccessRule(sid, FileSystemRights.FullControl, AccessControlType.Allow); fileAcl.AddAccessRule(rule); // add low integrity level rights // ??? 如果有人知道如何在不调用C API的情况下做到这一点,我将不胜感激,否则我将不得不重新使用它。 提前致谢

键盘挂钩改变键的行为

我正在创build一个安装键盘钩子的程序来捕获所有键并显示一些与它们相关的文本。 但是,我遇到了一个障碍,这是一些键更改行为,当安装钩。 我会看到发布一个小的,但完整的testing程序,但现在我只是描述了这个问题。 这个问题展现在Windows 7 64位,.NET 4.0(一个C#程序)上。 我认为这些都不重要。 我的钩子通过SetWindowsHookEx自行安装,然后处理在系统中处理的所有密钥。 如果钩子方法简单地返回,或者对键的最小处理(我将发布什么改变了一秒钟的行为),则键盘按照预期在程序中起作用。 但是,如果我从User32.dll中调用这个函数ToAscii ,找出我的键盘上的OemTilde或类似的键,那么任何“覆盖下一个键”的键将停止运行。 我不知道这样的键的正确名称,但是两个撇号types,“和” , as well as 〜 and ¨,都不起作用。 例如,如果我点击~然后是N ,则显示如下: 没有安装键盘挂钩: 随着键盘挂钩安装:n(通知no〜以上) 有谁知道为什么发生这种情况,我怎么能解决这个问题? 现在我只好在其他程序中正确处理密钥,即使这意味着我将无法在自己的程序中正确检测到正确的密钥序列。 一些更多的信息: 如果我将ToAscii函数作为钩子方法的一部分,则会出现不同的问题。 像¨键是处理两次,即。 如果我打了¨一次,记事本收到两个¨¨字符,现在打N只是加了N 但是,如果我使用BeginInvoke来处理单独的线程上的键,键盘钩子方法返回后,第一个问题发生。 我的程序可能有点特别: 我不使用键盘状态(即我传递的“键状态”256字节数组只是满了0) 我不在乎死钥匙(在我的程序不会处理它们的意义上,我只关心他们,我不希望我的程序使它们对系统的其他部分无用) 就这样,我的代码最终看起来如下: private bool IsDeadKey(uint key) { return ((Hook.Interop.MapVirtualKey(key, 2) & 2147483648) == 2147483648); } void _Hook_KeyDown_Async(KeyDownEventArgs e) { var inBuffer = […]

用于Windows 98的.NET 2.0应用程序的安装程序

如何为Windows 98创build.NET 2.0应用程序的自动安装程序? 我的意思是应用程序,也为.NET 2.0,如果失踪。 我试图通过创build一个Visual Studio 2008的安装项目,但我没有成功。 我手动安装IE6 SP1,但安装程序仍崩溃。 Windows Installer 2.0已安装。 在那里安装Installer 3.0是不可能的。 我在安装程序项目先决条件取消选中安装程序,但仍不能安装应用程序 – 错误消息说,它需要更新版本的Windows。 这怎么解决?

将XMLstring反序列化为对象错误:xml文档中存在错误(1,2)

从Windows事件查看器我可以得到以下的XML结构: <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="XXXXXXXXXX" Guid="{YYYYYYYY}" /> <EventID>XYZ</EventID> <Version>0</Version> <Level>L</Level> <Task>A</Task> <Opcode>0</Opcode> <Keywords>0x000xyzh</Keywords> <TimeCreated SystemTime="2012-06-28T15:44:04.997837000Z" /> <EventRecordID>153</EventRecordID> <Correlation ActivityID="{DDDDDDDDD}" /> <Execution ProcessID="199999" ThreadID="90990" /> <Channel>Microsoft-Windows-ABCDEFG/Admin</Channel> <Computer>myPC</Computer> <Security UserID="ABCABC" /> </System> <EventData> <Data Name="name1">data1</Data> <Data Name="name2">data2</Data> <Data Name="name3">data3</Data> </EventData> <RenderingInfo Culture="en-US"> <Message>some message </Message> <Level>Information</Level> <Task>XYZ</Task> <Opcode>Info</Opcode> <Channel /> <Provider /> <Keywords> <Keyword>XYZ</Keyword> </Keywords> </RenderingInfo> […]

对于Windows窗体,PostMessage等于自己的什么?

我正在写一个从System.Windows.Forms.Control派生自定义控件。 该控件使用Control.KeyDown事件来观察击键:我应该处理一些击键(例如<Ctrl>-K )作为热键,这使我启动一个对话框。 如果我从我的onKeyDown事件处理程序启动对话框,则在将KeyEventArgs.SuppressKeyPress设置为true并返回(因此我无法抑制K按键)之前,会显示该对话框。 相反,我想从onKeyDown事件处理程序返回,然后启动对话框。 要做到这一点,我从onKeyDown事件处理程序返回后,我需要以某种方式再次调用,与某种“启动对话”事件。 在Win32上,我可以使用PostMessage API生成这个事件,向我自己发送一个注册的窗口消息:我将在消息队列中的任何先前消息之后立即收到此消息,并将其用作启动对话框的信号。 但是在这里,我不能使用PostMessage函数(也不是WndProc方法),因为我想使用严格pipe理的 API(不需要SecurityPermissionFlag::UnmanagedCode )。 那么对于一个线程(我的用户界面线程)来说,pipe理的等价物是什么,来安排一个asynchronouscallback:或许是某种types的定时器? 某种自我Invoke ?

阅读,添加,删除.NET中的Windows用户

我想使用.NET代码从Windows读取,添加和删除用户。 我怎样才能做到这一点?

我如何等待Windows进程及其subprocess全部退出?

我们有一个启动程序,执行一些设置(启动服务器),启动subprocess,等待(通过工作线程)subprocess退出,然后做一些清理(停止服务器)。 这已经到位,工作正常。 不过,我们的一些应用可以启动其他应用。 例如,启动程序可能启动应用程序A,然后我可以单击启动应用程序B的应用程序A中的button。然后closures应用程序A,启动程序的Process.WaitForExit调用返回,启动程序停止服务器 – 不知道应用程序B仍在运行。 我们只使用启动器进行开发testing,所以这不是一个危机,但是当应用B试图与服务器交谈并崩溃时,这是不方便的。 开始一个subprocess,然后等待它(和它的任何subprocess)退出的最好方法是什么? 这些应用程序(启动器和应用程序都启动)都在.NET中。 如果我必须在每个应用程序中编写特殊的代码(例如打开一个指定的信号量)来完成这个工作,那就好了; 我只是不确定最好的办法。 奖励积分,如果有一些方法只能等待我的应用程序完成 – 例如,如果我的应用程序启动记事本,我不想等待记事本closures; 我只想等待需要服务器的应用程序。 但这不是一个要求,只是一个很好的。

将进程或模块标识为托pipe/本地

可能重复: 如何确定一个过程是否在C#中pipe理? 我如何知道一个进程或模块是以托pipe(.NET)还是以本地编程方式(使用C ++)?