-
March 24th, 2004, 12:31 PM
#1
double clicking a file should open it
I am trying to open the file in my application when you double click the file (or likewise from the context menu). Assume a file type of extension .abc which is unique to the pc.
I ran this through Jeff Prosis (Programming Windows with MFC) that the following lines should do all the work after AddDocTemplate(pDocTemplate); line in InitInstance()
PHP Code:
AddDocTemplate(pDocTemplate);
CWinApp::RegisterShellFileTypes(TRUE);
CWinApp::EnableShellOpen();
However this doesn't register the file types and the context menu are the same as before and double click doesn't work. Is there anything else need to be done?
Thanks
-
March 24th, 2004, 01:10 PM
#2
Hi,
I have VB code that does that.
Perhaps it could help you.
Code:
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" ( _
ByVal hKey As Long, _
ByVal lpSubKey As String, _
phkResult As Long _
) As Long
Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" ( _
ByVal hKey As Long, _
ByVal lpSubKey As String, _
ByVal dwType As Long, _
ByVal lpData As String, _
ByVal cbData As Long) _
As Long
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const MAX_PATH = 260&
Public Const REG_SZ = 1
Public Declare Sub SHChangeNotify Lib "shell32.dll" ( _
ByVal wEventId As Long, _
ByVal uFlags As Long, _
dwItem1 As Any, _
dwItem2 As Any)
Public Const SHCNE_ASSOCCHANGED = &H8000000
Public Const SHCNF_IDLIST = &H0&
Public Sub Associate(AppKey As String, _
AppName As String, _
AppFileExt As String, _
AppFileName As String, _
Command As String, _
IcoPath As String)
Dim sKeyName As String, sKeyValue As String
Dim lngRep As Long, lphKey As Long
On Error GoTo Fin
'Create root key
sKeyName = AppKey
sKeyValue = "NLFacilities files"
lngRep = RegCreateKey(HKEY_CLASSES_ROOT, sKeyName, lphKey)
lngRep = RegSetValue(lphKey, "", REG_SZ, sKeyValue, 0&)
'Create association
sKeyName = AppFileExt
sKeyValue = AppKey
lngRep = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey)
lngRep = RegSetValue&(lphKey, "", REG_SZ, sKeyValue, 0&)
'Create command line
sKeyName = AppKey
sKeyValue = Command
lngRep = RegCreateKey(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
lngRep = RegSetValue&(lphKey, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH)
'Create icon
sKeyName = AppKey
sKeyValue = IcoPath
lngRep = RegCreateKey(HKEY_CLASSES_ROOT, sKeyName, lphKey)
lngRep = RegSetValue(lphKey, "DefaultIcon", REG_SZ, sKeyValue, MAX_PATH)
'Notify to system the icon update
SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0
Fin:
End Sub
Public Sub Main()
Associate "MyProg", _
"MyProg", _
".MYF", _
"MyProg", _
"E:\MyProg\MyProg.exe /Arg(%1)", _
"E:\MyProg\MyProg.ico"
End Sub
-
March 24th, 2004, 01:26 PM
#3
thanks for your post but this all stuff is supposed to be done by MFC. On top it, I have atleast manually associated the file types to my application and the double click of course works this way but I am not able to debug the application for double click! Any idea for that?
I really need to register the files types from my program, any ideas?
Thanks
-
March 24th, 2004, 02:06 PM
#4
Your document string must have correct extension field.
If not DDE will fail.
There are only 10 types of people in the world:
Those who understand binary and those who do not.
-
March 24th, 2004, 02:16 PM
#5
Can you please elaborate on this!
Do you mean the string resource associated with document template or the document file name.
thanks
-
March 24th, 2004, 03:03 PM
#6
Thanks JohnCz, that was the problem.
Is there anyway we can associate an icon as well? Everything works fine but the the files icon still remains the same ukknown file types. Can we change that as well from our program?
Thanks!
-
March 24th, 2004, 03:50 PM
#7
You are welcome.
Proper document string for a template should display proper icon.
If you changed icon or properly register application to process DDE icon will not change automatically in explorer since Windows is caching icons in special file. To fix it you would have to delete this file and reboot computer.
In all version of Windows but XP file name is ShellIconCache found in windows/winnt directory. For XP you can find it in C:\Documents and Settings\Your User Name\Local Settings\Application Data in Iconcache.db
There are only 10 types of people in the world:
Those who understand binary and those who do not.
-
March 24th, 2004, 08:46 PM
#8
Look at the constructor for CSingleDocTemplate and CMultiDocTemplate; especially CMultiDocTemplate, since it seems to have an example of the document string that is not in the CSingleDocTemplate documentation. Note that the first parameter is "nIDResource". Supposedly it can be the id of an icon, right?
-
March 25th, 2004, 01:57 PM
#9
only rebooting the pc worked but thanks for the additional info.
regards,
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|