Windows窗体有一个属性win1.Handle,如果我记得,它返回主窗口句柄的句柄?
是否有相同的方法来获取WPF窗口的句柄?
我在网上找到了以下代码,
IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;
Run Code Online (Sandbox Code Playgroud)
但我认为这不会对我有所帮助,因为我的应用程序有多个窗口.
谢谢!!
我想在屏幕的右上角打开一个WPF窗口.
现在我可以通过打开窗口然后移动它来实现(通过user32.dll中的movewindow).但是,这种方法意味着窗口在其默认位置打开,完全加载,然后移动到右上角.
我怎么能改变它以便我可以指定窗口的初始位置和大小?
我刚刚开始学习MVVM Light框架,但我找不到任何关于如何使用RelayCommand的简单示例.出于学习的目的,我只想在我的视图中有一个按钮,当点击时显示一个hello world world消息框,并且每隔一分钟启用一次(基本上如果DateTime.Now.Minute%2 == 0) .
按钮XAML如何显示以及如何在ViewModel中定义RelayCommand HelloWorld?
谢谢你的帮助!!
我正在搞乱Win32 API和Windows消息传递,试图找出工作原理,我发现这个问题非常有用.
我想改进那里提供的解决方案,以便它附加文本而不是仅通过WM_SETTEXT替换记事本中的文本.
我的问题是,我如何使用WM_GETTEXTLENGHT,然后使用WM_GETTEXT来获取记事本窗口中的当前文本,以便我可以在使用WM_SETTEXT之前将新文本附加到它?
使用WM_XXXTEXT是否适用于32位和64位计算机?如果记事本中有很多文本,那么建议的get/set算法是否仍然可行或者是否会占用大量资源?如果是这样,是否有另一种方法将文本附加到记事本窗口而不先复制其中的所有内容?
谢谢你的帮助!!
更新:
以下是我根据David Heffernan的帮助和Google/SO切割粘贴提出的代码.由于我是Win32API的新用户,并且从不同的来源复制了很多行,所以我很感激任何反馈.
[DllImport("User32.dll", CharSet = CharSet.Auto)]
extern static IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, [In] string lpClassName, [In] string lpWindowName);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
extern static int SendMessageGetTextLength(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, int lParam);
const int WM_GETTEXTLENGTH = 0x000E;
const int EM_SETSEL = 0x00B1;
const …Run Code Online (Sandbox Code Playgroud) 编辑:
简单的代码我用来解决问题以防任何人感兴趣(感谢Fredrik):
int windowOverlap(Rectangle rect1, Rectangle rect2)
{
if (rect1.IntersectsWith(rect2))
{
Rectangle overlap = Rectangle.Intersect(rect1, rect2);
if (overlap.IsEmpty)
return overlap.Width * overlap.Height;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
原始问题:
我想知道一种快速而又脏的方法来检查两个矩形是否重叠,以及它们是否确实计算了重叠区域.为了好奇,我对以下情况感兴趣:1)两个矩形中的所有线条都是垂直的或水平的,或2)任何两个矩形的一般情况,但我真正需要的唯一答案是案例1.
我在想:
double areaOfOverlap( Rect A, Rect B)
{
if ( A.Intersects(B) )
{
// calculate area
// return area
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于A.Intersects(),我考虑使用分离轴测试,但如果矩形只有水平和垂直线,那么还有更简单(更快)的检查方法吗?
如果矩形只有水平和垂直线,那么计算它们相交的区域有一个快速的方法吗?
最后,这与这个问题无关,但我很感激有人可能会在一本好书/网页上提出任何建议,我可以在那里查看计算机图形学的数学知识.我已经离开大学一段时间了,觉得我忘记了一切:)!其他人有这个问题吗?
(注意:我发现这个问题与此不同,这似乎更复杂,并没有直接回答这个问题.)
您是否会推荐使用Iron Ruby,Iron Python或PowerShell来使C#应用程序成为脚本宿主?
经过一些快速的修补,现在我倾向于PowerShell有两个主要原因(注意这些纯粹是我的意见,如果他们错了,我很想知道!!!):
1)在应用程序中创建包含类的运行空间很简单; 因此,您可以轻松地编写应用程序脚本.
2)我听说有一些传言说IronRuby和IronPython正在失去微软的支持,所以他们可能是一个糟糕的长期解决方案?
由于这是我第一次在应用程序中添加脚本,我欢迎所有可以从以前走过这条路的人那里得到的建议.
具体来说,除了让我知道你是否同意我的上述两点之外,我想知道IronRuby和IronPython是否比PowerShell更容易使用(对于用户而不是开发人员),如果您使用DLR的经验是就像将对象传递给powershell运行空间一样简单?如果我添加了对DLR和IR/IP脚本的支持,我的应用程序是否仍然可以向后兼容XP?
找出Windows计算机上运行的版本和哪个Service Pack 的最简单方法是VBScript什么?
例如,我想知道Windows XP和Service Pack 3.
我正在尝试在"应用程序设置"中存储一组自定义对象.
// implementing ApplicationSettingsBase so this shows up in the Settings designer's
// browse function
public class PeopleHolder : ApplicationSettingsBase
{
[UserScopedSetting()]
[SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
public ObservableCollection<Person> People { get; set; }
}
[Serializable]
public class Person
{
public String FirstName { get; set; }
}
public MainWindow()
{
InitializeComponent();
// AllPeople is always null, not persisting
if (Properties.Settings.Default.AllPeople == null)
{
Properties.Settings.Default.AllPeople = new PeopleHolder()
{
People = new ObservableCollection<Person>
{
new Person() { FirstName = …Run Code Online (Sandbox Code Playgroud) 我正在编写ac#application,它使用自动化来控制另一个程序.当然,该程序必须运行才能使我的程序正常运行.当我的程序查找应用程序但找不到它时,我想抛出异常(现在我可以尝试打开应用程序,或者告诉用户打开它,或者......).
我应该实现自定义异常 - 还是使用现有的NotSupportedException(或其他.NET异常之一).如果是自定义异常,你会建议什么?我正在考虑实现一个自定义异常我称之为MyAppNameException然后只是使用该消息来声明问题是什么?
在那里的方式,让你的程序更具可读性和用户友好的抛出异常的一般规则,还是我只是给这个太多心思:)?
谢谢!
我正在使用
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer()
Run Code Online (Sandbox Code Playgroud)
控制/自动化Internet Explorer的实例.在某些页面上,我想运行一个JavaScript函数(init()).看来要做到这一点的最好办法是使用HtmlDocument的InvokeScript方法,我一直在努力,没有运气如下:
void ie_DocumentComplete(object pDisp, ref object URL)
{
System.Windows.Forms.HtmlDocument doc = ie.Document;
doc.InvokeScript("init");
}
Run Code Online (Sandbox Code Playgroud)
哪个失败,因为doc是null.我似乎无法得到System.Windows.Forms.HtmlDocument从ie.Document.除了尝试上述内容外,我还尝试过:
System.Windows.Forms.HtmlDocument doc2 = (System.Windows.Forms.HtmlDocument)ie.Document;
Run Code Online (Sandbox Code Playgroud)
和
System.Windows.Forms.HtmlDocument doc2 = ie.Document as System.Windows.Forms.HtmlDocument;
Run Code Online (Sandbox Code Playgroud)
有关如何使其工作的任何想法 - 或者更好的方式在页面上运行脚本?
谢谢!!
编辑:
另一种运行JavaScript函数的方法似乎是:
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer()
mshtml.HTMLDocument doc = ie.Document;
mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2;
win.execScript("init();", "javascript");
Run Code Online (Sandbox Code Playgroud)
但行
mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2;
Run Code Online (Sandbox Code Playgroud)
抛出一个错误,它是一个无效的cast(InvalidCastException) - …
c# ×7
wpf ×3
window ×2
.net ×1
area ×1
automation ×1
graphics ×1
handle ×1
ironpython ×1
ironruby ×1
mvvm ×1
mvvm-light ×1
overlap ×1
powershell ×1
rectangles ×1
sendmessage ×1
vbscript ×1
winapi ×1