Rob*_*Rob 7 windows windows-registry file-extension jar
我写了一个注册表,创建.myext.
双击 myfile.myext指的是我的可执行文件(从打开 a 的批处理文件转换而来.jar),然后打开我的记事本应用程序。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.myext]
@="myext"
[HKEY_CLASSES_ROOT\.myext\ShellNew]
[HKEY_CLASSES_ROOT\myext]
@=".myext file"
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008
[HKEY_CLASSES_ROOT\myext\DefaultIcon]
@="C:\\...\\icon.ico, 0"
[HKEY_CLASSES_ROOT\myext\shell]
[HKEY_CLASSES_ROOT\myext\shell\Open]
[HKEY_CLASSES_ROOT\myext\shell\Open\command]
@="C:\\...\\run.exe %1"
Run Code Online (Sandbox Code Playgroud)
start /min "C:\...\javaw.exe -jar" "C:\...\mjar.jar"
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我会收到该错误消息。也许正是这个转换应用程序导致了一些问题。
JTextPane. 如果我选择在 Windows 记事本中打开文档,则会显示所有文本。
PS 我没有使用 DDE,我不再收到错误消息:"file.myext" is not a valid Win32 application.
批处理文件建议
start "Mike's Text Editor" /min "C:\...\javaw.exe" -jar "C:\...\mjar.jar"
Run Code Online (Sandbox Code Playgroud)
start /min "C:\...\javaw.exe -jar" "C:\...\mjar.jar" "%1"
Run Code Online (Sandbox Code Playgroud)
注册建议
[HKEY_CLASSES_ROOT\myext\shell\open\command]
@="\"C:\\...\\run.exe\" \"%1\""
Run Code Online (Sandbox Code Playgroud)
这是正确关联所需的最低限度。我通过尝试下面我自己的技巧 4 发现了这一点(您可以了解 Windows 如何为您做到这一点...)。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.myext]
@="myext"
[HKEY_CLASSES_ROOT\myext]
@=".myext file"
[HKEY_CLASSES_ROOT\myext\shell]
[HKEY_CLASSES_ROOT\myext\shell\open]
[HKEY_CLASSES_ROOT\myext\shell\open\command]
@="\"C:\\...\\run.exe\" \"%1\""
Run Code Online (Sandbox Code Playgroud)
您可以根据需要添加 DefaultIcon 和其他内容,但如果没有 DefaultIcon,Windows 将仅使用 中的图标run.exe(如果有的话。您可以在创建 时在Batch To Exe Converterrun.exe中添加一个)。
%1和引号的重要性之所以需要放一个%1there,是为了将相关文件()的路径和名称传递file.myext到程序中run.exe。如果不传递此信息,您的关联就毫无意义,因为它只是作为快捷方式发挥作用。这是不必要的,因为您可以简单地创建一个普通的快捷方式来run.exe达到相同的目的。
您的批处理文件内部还应该有一个%1位置,以便在批处理文件中使用file.myext关联文件 ( )的路径和名称(大概是将其传递给您的文件,以便对文件执行某些操作)。否则,无论您双击哪个关联文件,您都将始终从 Java 程序中获得相同的结果。这再次毫无意义,因为您只需拥有批处理文件的快捷方式即可达到相同目的。mjar.jar
将引号括起来也很重要%1,因为文件路径可以包含空格,如果没有引号 ( "),这些空格可以将路径拆分为两个或多个参数(当整个路径被视为一个参数时)。
这是我转换为用于测试的批处理文件exe。它只是显示 的值%1。
@echo %1
@pause
Run Code Online (Sandbox Code Playgroud)
您的批处理文件可能如下所示(以便mjar.jar可以获得您双击的文件的路径和名称):
start /min "C:\...\javaw.exe -jar" "C:\...\mjar.jar" "%1"
Run Code Online (Sandbox Code Playgroud)
我将该exe文件与.myext扩展名相关联(使用技巧 4 中的方法),然后检查注册表以创建上述.reg文件。当我双击带有.myext扩展名的文件时,将打开一个命令窗口,显示(echo命令)我双击的文件的路径和名称(这就是我的测试批处理文件使用关联文件的方式)。
(这是最终解决您问题的完整聊天讨论的摘要。)中包含的 Java 程序mjar.jar必须准备好接受传入参数并使用它。您的目的是让程序自动打开传入参数引用的文件并显示其内容。因此该main方法应该是这样的:
public static void main (String[] args) {
if (args.length >= 1) {
openFile(args[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
该openFile方法是通过传入文件的名称打开文件的方法。该if语句确保args[0]仅在存在此类参数时才读取(避免ArrayIndexOutOfBoundsException)。args[0]上面的代码中只使用了第一个参数;所有其他参数(args[1]、args[2]等)都将被忽略。该openFile方法将是这样的(不包括描述符和返回类型):
openFile(String filename) {
// code here to open the file referred by "filename" variable,
// read its contents and display it on the GUI
// or use it in the program as intended
}
Run Code Online (Sandbox Code Playgroud)
如果您的程序在其 GUI 中内置了“打开”命令,则在用户使用此命令选择文件后,您的应用程序可以使用与openFile上述相同的方法打开所选文件并显示其内容。
我还没有对您的问题给出明确的答案,但这里有一些帮助您入门的提示:
您是否尝试过添加引号?像这样:@="\"C:\\...\\run.exe\" \"%1\""
在注册表中,(默认)值将显示如下:"C:\...\run.exe" "%1"
阅读有关文件类型关联的Microsoft 官方MSDN 文档。您还必须阅读有关编程标识符的内容(链接在该文档的第一段中)。
首先尝试将您的.myext文件类型与记事本关联。了解记事本如何与.txt文件关联并按照示例进行操作。如果操作正确,记事本应该打开您的file.myext文件。
您可以了解 Windows 如何为您执行此操作。右键单击file.myext,单击打开方式 > 选择默认程序... ^ 并浏览以查找您的run.exe文件。关联并打开,然后调查 Windows 注册表以了解 Windows 如何存储您的手动关联。然后,您可以简单地将文件类型和编程标识符导出到 reg 文件。
^ 如果file.myext未关联,请单击打开 > 从已安装程序列表中选择程序。
PS1:显然,.reg 文件中必须有双反斜杠。
PS2:最好直接编辑注册表中的内容,测试效果,然后将密钥导出到.reg文件并将它们组合成一个文件,而不是自己创建.reg文件。
| 归档时间: |
|
| 查看次数: |
2487 次 |
| 最近记录: |