我在此帖子Method Works In Visual Studio But Not From exe中遇到类似于用户的问题。但是,本文中提出的解决方案对我而言不起作用,因此我需要社区提供更多建议,以了解如何解决此问题。
我花了几天的时间来编写一个程序,该程序可以在Visual Studio中完全按照我的要求运行,但是当我构建解决方案并从.exe文件运行该程序时,该程序的一部分无法正常工作。
程序的一部分在下面。如果用户的Caps Lock键当前处于打开状态,则键入小写的“ d”;如果当前已关闭Caps Lock,则键入“ D”。
Imports System.Threading
Imports System.Windows.Forms
Module NavigateToTopOfDemographicsScreenModule
Sub NavigateToTopOfDemographicsScreen()
If System.Windows.Forms.Control.IsKeyLocked(Keys.CapsLock) Then
System.Windows.Forms.SendKeys.SendWait("d{Enter}")
Else
System.Windows.Forms.SendKeys.SendWait("D{Enter}")
End If
Thread.Sleep(1000)
End Sub
End Module
这是一个.NET Framework控制台应用程序。我将其作为Windows窗体应用程序运行,以便控制台窗口在运行时不会向用户显示。
我正在使用程序的这一部分向其他程序发送击键,以确保在屏幕抓取之前该程序在正确的屏幕上。
同样,当我按下Visual Studio中的“运行”按钮时,该程序将运行,但是当我构建解决方案并尝试从.exe文件运行该程序时,该程序的这一部分将无法正常工作。
如果可能有帮助,下面列出了我用于该项目的程序集。
C:\Windows\assembly\GAC_MSIL\Office\15.0.0.0__71e9bce111e9429c\Office.dll
C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\14.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.DataSetExtensions.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Deployment.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Drawing.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Windows.Forms.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.Linq.dll
C:\Windows\assembly\GAC_MSIL\Microsoft.Vbe.Interop\15.0.0.0__71e9bce111e9429c\Microsoft.Vbe.Interop.dll
任何帮助将不胜感激!
答案 0 :(得分:0)
因此,到目前为止,此解决方案似乎正在起作用:Sendkeys not working on UAC。我在MSDN网站上找到它。
要点很明确,我要做的是打开解决方案的文件夹,并找到一个名为 App.Config 的文件。
我在记事本中打开此文件,并添加了以下代码来强制我的SendKeys.Wait方法使用该方法的较新版本,就像用户在MSDN上的文章中所提到的那样。
<appSettings>
<add key="SendKeys" value="SendInput"/>
</appSettings>
这样做之后,我从可执行文件中运行了该程序,它现在似乎与从Visual Studio 2017中运行该程序时一样工作。如果还有其他问题,我将更新此帖子。
下面是用户在MSDN网站上写的内容,似乎对我有帮助。
如果您的应用程序在任何操作系统上都依赖一致的行为,则可以通过将以下应用程序设置添加到app.config文件中,强制SendKeys类使用新的实现。
<appSettings>
<add key="SendKeys" value="SendInput"/>
</appSettings>
要强制SendKeys类使用以前的实现,请改用值“ JournalHook”。
谢谢!
马克S。