根据http://msdn.microsoft.com/en-us/library/ms633500(v=vs.85).aspx我定义了FindWindowEx函数.
using System.Runtime.InteropServices;
[DllImport("user32.dll", CharSet=CharSet.Unicode)]
static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
Run Code Online (Sandbox Code Playgroud)
现在我能够找到第一个 "Button"控件的句柄(从Spy ++获取名称),将childAfter设置为IntPtr.Zero.
IntPtr hWndParent = new IntPtr(2032496); // providing parent window handle
IntPtr hWndButton = FindWindowEx(hWndParent, IntPtr.Zero, "Button", string.Empty);
Run Code Online (Sandbox Code Playgroud)
如何在父窗口中获取"Button"控件的第二个,第三个或任何句柄?事实是,按钮标题可能会有所不同,所以我无法通过名称定义第四个参数直接找到它们.
我要解析的页面只能通过POST方法获取.
对于Java来说这很容易,我可以看到:
import org.jsoup.Jsoup;
Response res = Jsoup.connect("URL").method(Method.POST).execute();
Document doc = res.parse();
Run Code Online (Sandbox Code Playgroud)
我无法使用CFscript生成相同的东西.
jsoup = createObject("java", "org.jsoup.Jsoup");
response = jsoup.connect("URL").method(Method.POST).execute();
if (response.statusCode() == 200)
{
doc = response.parse();
}
Run Code Online (Sandbox Code Playgroud)
-ERR元素POST在METHOD中未定义
我几乎尝试了一切.我无法同时使用.method()和.execute().
如果我直接调用.get()或.post(),那么我就无法检查statusCode().
下面的代码运行正常.我想知道它是否真的正确?
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
Parallel.ForEach(openFileDialog.FileNames, currentFile =>
{
try
{
StreamReader FileReader = new StreamReader(currentFile);
do
{
URLtextBox.Invoke(new MethodInvoker(delegate
{
URLtextBox.Text += SelectURLfromString(FileReader.ReadLine());
}));
}
while (FileReader.Peek() != -1);
FileReader.Close();
}
catch (System.Security.SecurityException ex)
{
...
}
catch (Exception ex)
{
...
}
});
}
Run Code Online (Sandbox Code Playgroud)
否则我得到"跨线程操作无效.控制'URLtextBox'从另一个线程访问"或卡住应用程序.
是否可以在页面中的新窗口或选项卡中打开页面?
是的,我的意思是当前的 HTML页面本身.不是这样的另一个人的电话:
window.open('page.html','_blank');
Run Code Online (Sandbox Code Playgroud)
可能是JS和<body onLoad=...>操纵.
需要这个来修改非常复杂的CGI,其中只有少数动作应该在新窗口中打开.无法修改代码,因此只需要纯HTML + JS解决方案.
谢谢.
想象一下你需要动态解析的一种CSV文件.
它适用于本地磁盘存储,但不适用于ram:///
<cfscript>
cfhttp(
method = "Get",
url = "http://real-chart.finance.yahoo.com/table.csv?s=YHOO&d=4&e=2&f=2016&g=d&a=3&b=12&c=2016&ignore=.csv",
//path = "C:\CFTemp",
path = "ram:///",
file = "currentCSV.csv"
);
cfdirectory(
name="files",
action="list",
directory="ram:///",
recurse="true",
type="all"
);
writeDump(files);
myfile = FileRead("ram:///currentCSV.csv");
WriteOutput("#myfile#");
fileReader = createobject("java","java.io.FileReader");
fileReader.init("ram:///currentCSV.csv"); // -ERROR
csvReader = createObject("java","com.opencsv.CSVReader");
csvReader.init(fileReader, ",");
ArrayData = csvReader.readAll();
writeDump(ArrayData);
</cfscript>
Run Code Online (Sandbox Code Playgroud)
-ERR ram:/currentCSV.csv(文件名,目录名或卷标语法不正确)
这里有什么问题?
ColdFusion 11,OpenCSV 3.7
一般来说,使用两个堆栈来防止缓冲区溢出探索是否更简单?一个用于变量和传递参数的堆栈,另一个用于返回地址。
或者像 NX/XD 位(在 AMD/Intel x86 上)作为非可执行堆栈的东西做得更好?
c# ×2
cfml ×2
coldfusion ×2
assembly ×1
csv ×1
handle ×1
html ×1
javascript ×1
jsoup ×1
opencsv ×1
ram ×1
spy++ ×1
visual-c++ ×1
winapi ×1
winforms ×1