|
The problem is, in a rich edit control, the font can change on each and every character. It's also complicated by the fact that the control supports OLE embedding, which means you could have God-knows-what embedded in the text as well. I have a feeling, unless there's an explicit message provided by the control itself (I couldn't find one on MSDN), you're out of luck.
Sorry to not be of any help.
|
|
|
|
|
Thanks anyway, that's pretty much what I've concluded after trawling through MSDN and every other source I could find.
|
|
|
|
|
hi
i have this func :
void CForm1::OnCommand1()<br />
{<br />
CComVariant retval;
<br />
CString app_path;<br />
CString Icon;<br />
<br />
app_path = Str(App.path)+CString("\\")+Str(App.EXEName)+".exe";<br />
Icon = Str(App.path)+CString("\\")+"book.ico";<br />
<br />
retval = Associate_File(".abd", app_path, "abd_ext", "My own extension", Icon);<br />
AfxMessageBox(("Associated the file extension .abd with this application!"));<br />
<br />
}
and its converted from VB code by aprogram called VBto convertor.
when i compiled it , it shows an error that
error C2065: 'App' : undeclared identifier and
error C2228: left of '.path' must have class/struct/union type
as i understand .. App is aclass in VB
so my question is
Is There any equivalent class in vc++ for the App?
and if not ...
can someone please tell me what can i do about this?any help would be appreciated .
thanks in advance.
lahom
|
|
|
|
|
There is no class in VC++ for this but you can use GetModuleBaseName and GetModuleFileName to achieve same thing.
This code snippet will give you the full path to the exe i.e. app_path.
char buffer2[2048];<br />
GetModuleFileName(NULL, buffer2, 2048);
This code snippet will give you the name of the executable path.
HANDLE hProcess = GetCurrentProcess();<br />
char buffer1[2048];<br />
DWORD r1 = GetModuleBaseName(hProcess, NULL, buffer1, 2048);
So if path of running application is C:\Windows\System32\Foo.exe. GetModuleFileName will return C:\Windows\System32\Foo.exe and GetModuleBaseName will return Foo.exe. Using these two string you can easily get path of Icon which should be C:\Windows\System32.
-Saurabh
|
|
|
|
|
I don't know anything about VBto convertor. However, I'm trying to answer.
When using MFC (seeing that CString and AfxMessageBox() were used in your code snippet), there is a class named CWinApp. You can get it by calling AfxGetApp() but none of its members provides exactly what you need although it has public data members like m_pszAppName, m_pszExeName.
You can use following functions appropriately to get fully qualified executable file name and folder name.
Like;
app_path = GetExeName();
Icon = GetExeFolder() + "\\book.ico";
CString GetExeName()
{
CString str;
DWORD dwLen = GetModuleFileName(NULL,
str.GetBufferSetLength(_MAX_PATH), _MAX_PATH);
str.ReleaseBuffer(dwLen);
return str;
}
CString GetExeFolder()
{
CString str = GetExeName();
LPTSTR psz = _tcsrchr(str.GetBuffer(1), _T('\\'));
if(NULL != psz)
*psz = _T('\0');
str.ReleaseBuffer(-1);
return str;
}
|
|
|
|
|
hi
iam sorry that it took me so long to reply to ui tried using the two functions u provided me >>>> but when i check the registry ....
i found that there is no directory specified for the extension i made "for example .ccc" .i mean there is a folder for the extension but with no directory specified for the "open " command for example.
i also tried the GetModuleFileName and GetModuleBaseName
but it also the same thing ...
no directory for the icon or the commands as well.....
what shall i do now?
thank u very much for ur help all
it was very helpful.
now iam just one step away from finishing.
this is "I HOPE" the last thing to complete the creation of the associate file type
again....THANK u all
lahom
|
|
|
|
|
Have you ever watched the return values of the functions that I provided?
As I understand, you are trying to associate an extension to your application.
There should be a string value under that extension key, named ".abd" for your example, as following.
(Default) | REG_SZ | "abd_ext" (in right pane of regedit, Name, Type, Data columns respectively)
"key" means "directory" in your terms.
In addition, there should be another key with the name "abd_ext".
Under that abd_ext key, DefaultIcon and Shell/Open/Command keys should exist.
Please, check if they exist.
If not, there should be a problem within your Associate_File() function, I think.
|
|
|
|
|
well everything u mentioned exists.
but with no directory shown in the right pane of regedit
what shown exactly for example is"for example":
(Default) | REG_SZ | u+s
as well as for the DefaultIcon and Shell/Open/Command keys ..
so i think the Associate_File() is working fine
what do u think the problem is and how to solve it...
lahom
|
|
|
|
|
The same in mine (in WinXP SP2). So, we can say that regedit doesn't show directories in the right pane.
BTW, I didn't really understand what the problem is? Could you explain more?
|
|
|
|
|
ok
the problem is that
in the application demo that i have, when pressing the button....amessage box appears saying that the file type .abd has been associated
and when naming any text file with .abd ..... it would be open in the demo program showing the content of the file in the dialog box....ok
when i tried to do it my self with another extension".ccc"
everything going good when pressing abutton saying the same thing and eveything ....but where is the difference?
it is when i try to name a text file with the extension .ccc nothing happend and icant open it "it wont see the file type"....
and also as i said before when checking and comparing the .abd AND .ccc
i found that .abd has directory for the command and the defaulticon...where for the .ccc there is not just something like"s+I" or ")]"
which is nothing exactly
i dont know what is wrong
did u get the idea?
iam really stuck in this
thanks for ur PATIENCE
|
|
|
|
|
lahom wrote: it is when i try to name a text file with the extension .ccc nothing happend and icant open it "it wont see the file type"....
Check to make sure that you successfully renamed the file extension.
(Depending on which version of Windows OS you use)
There is an option in Windows explorer settings. Under Windows Explorer's Tools menu, there is a menu command "Folder Options...", if you run it, Folder Options dialog box pops up. In view tab of this dialog, you will see "Advanced Settings:" control, find "Hide extensions of known file types" check box and clear it (remove check mark). Then, have a look the file which you wanted to rename. txt extension may still there.
Which version of Windows OS you use?
|
|
|
|
|
iam sorry ...maybe i wasnot clear enough
Ozer Karaagac wrote: lahom wrote:
it is when i try to name a text file with the extension .ccc nothing happend and icant open it "it wont see the file type"....
i didnt mean it like that .
what i menti is that when i rename "example.txt"
to "example.ccc"
the file would chang to unknown file and need to open with "open with"
which is not the case in "example.abd"
where it would open normally in the demo application specified before.
i hope i was clear this time
by the way "i use windows xp pro"
|
|
|
|
|
Well, what are the Default values of shell/open/command and DefaultIcon of the file type when you look into them by regedit? You may also use "Advanced" button in "File Types" tab of Folder Options dialog box.
If shell/open/command points a file which can not be found, file association won't be valid.
|
|
|
|
|
Ozer Karaagac wrote: what are the Default values of shell/open/command and DefaultIcon of the file type when you look into them by regedit?
ok
for the "example.abd"it is as the following:
folder: ext_abd (Default) REG_SZ My own extension
folder: Defaulticon (Default) REG_SZ C:\Documents and Settings\MooNPC\Desktop\my folder\project\FileAssociate_demo\book.ico
folder: shell (Default) REG_SZ (value not set)
folder: open (Default) REG_SZ (value not set)
folder: command (Default) REG_SZ "C:\Documents and Settings\MooN PC\Desktop\my folder\project\FileAssociate_demo\File_associate.exe" "%1"
//**************************************************************//
but for the "example.ccc" it is like this:
folder: ext_ccc (Default) REG_SZ <+B
folder: Defaulticon (Default) REG_SZ ce)B
folder: shell (Default) REG_SZ (value not set)
folder: open (Default) REG_SZ (value not set)
folder: command (Default) REG_SZ \$B
//*********************************************************************//
this is what is shown in the regedit
so
what do u think?
help pleeease
|
|
|
|
|
Yes. They all seemed garbage values.
It also seems that some of the parametes, are passed to Associate_File() funtion, have a problem including 4th parameter which is just a string (i.e. "My own extension"). However, another string parameter "ext_ccc" have not. Because a registry key has been created with that name. I think, the problem may be in Associate_File() funtion. At first, we have to be sure for the parameter values which are passed to Associate_File() funtion.
Could you please re-post your code snippet with the latest changes that you've posted earlier?
And how do you use strings in your project ANSI or UNICODE?
|
|
|
|
|
ok
this is the associate file function:
CComVariant Associate_File(CString Extension, CString Application, CString &Identifier, CString Description, CString Icon)<br />
{<br />
CComVariant Associate_File;<br />
<br />
LONG lRtn;
HKEY hKey = NULL;
int lValue;
CString sValue;
int lsize;
CString commandline;<br />
DWORD dwDisp;<br />
lRtn = RegCreateKeyEx(HKEY_CLASSES_ROOT, Extension, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0, &hKey, &dwDisp);<br />
<br />
if (lRtn!=ERROR_SUCCESS) {<br />
AfxMessageBox(CreateErr);<br />
}<br />
<br />
lsize = Identifier.GetLength();
lRtn = RegSetValueExA(hKey, "", 0, REG_SZ, (const unsigned char*)&Identifier, lsize);<br />
if (lRtn!=ERROR_SUCCESS) {<br />
AfxMessageBox("Error Setting String Value!");<br />
RegCloseKey((hKey));<br />
return Associate_File;<br />
}<br />
<br />
RegCloseKey((hKey));<br />
<br />
lRtn = RegCreateKeyEx(HKEY_CLASSES_ROOT, Identifier, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0, &hKey, &dwDisp);<br />
<br />
if (lRtn!=ERROR_SUCCESS) {<br />
AfxMessageBox(CreateErr);<br />
}<br />
<br />
lsize = Description.GetLength();
lRtn = RegSetValueExA(hKey, "", 0, REG_SZ, (const unsigned char*)&Description, lsize);<br />
if (lRtn!=ERROR_SUCCESS) {<br />
AfxMessageBox("Error Setting String Value!");<br />
RegCloseKey((hKey));<br />
return Associate_File;<br />
}<br />
<br />
RegCloseKey((hKey));<br />
<br />
<br />
lRtn = RegCreateKeyEx(HKEY_CLASSES_ROOT, (Identifier+"\\DefaultIcon"), 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0, &hKey, &dwDisp);<br />
<br />
if (lRtn!=ERROR_SUCCESS) {<br />
AfxMessageBox(CreateErr);<br />
}<br />
<br />
lsize = Icon.GetLength();
<br />
lRtn = RegSetValueExA(hKey, "", 0, REG_SZ, (const unsigned char*)&Icon, lsize);<br />
if (lRtn!=ERROR_SUCCESS) {<br />
AfxMessageBox("Error Setting String Value!");<br />
RegCloseKey((hKey));<br />
return Associate_File;<br />
}<br />
<br />
RegCloseKey((hKey));<br />
<br />
<br />
<br />
Identifier += "\\shell";<br />
<br />
lRtn = RegCreateKeyEx(HKEY_CLASSES_ROOT, Identifier, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0, &hKey, &dwDisp);<br />
<br />
if (lRtn!=ERROR_SUCCESS) {<br />
AfxMessageBox(CreateErr);<br />
}<br />
<br />
RegCloseKey((hKey));<br />
<br />
<br />
Identifier += "\\open";<br />
<br />
lRtn = RegCreateKeyEx(HKEY_CLASSES_ROOT, Identifier, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0, &hKey, &dwDisp);<br />
<br />
if (lRtn!=ERROR_SUCCESS) {<br />
AfxMessageBox(CreateErr);<br />
}<br />
<br />
RegCloseKey((hKey));<br />
<br />
<br />
Identifier += "\\command";<br />
<br />
lRtn = RegCreateKeyEx(HKEY_CLASSES_ROOT, Identifier, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0, &hKey, &dwDisp);<br />
<br />
if (lRtn!=ERROR_SUCCESS) {<br />
AfxMessageBox(CreateErr);<br />
}<br />
<br />
commandline = (Str(CString(char(34)))+Application+Str(CString(char(34)))+" "+Str(CString(char(34)))+"%1"+Str(CString(char(34))));<br />
lsize = commandline.GetLength();
lRtn = RegSetValueExA(hKey, "", 0, REG_SZ, (const unsigned char*)&commandline, lsize);<br />
if (lRtn!=ERROR_SUCCESS) {<br />
AfxMessageBox("Error Setting String Value!");<br />
RegCloseKey((hKey));<br />
return Associate_File;<br />
}<br />
<br />
RegCloseKey((hKey));<br />
return Associate_File;<br />
}
this is the button event:
void CForm1::OnCommand1()<br />
{<br />
CComVariant retval;
CString exten="ccc_ext";<br />
CString app_path;<br />
CString Icon;<br />
char buffer2[2048];<br />
HANDLE hProcess = GetCurrentProcess();<br />
char buffer1[2048];<br />
DWORD r1 = GetModuleBaseName(hProcess, NULL, buffer1, 2048); <br />
app_path=GetModuleFileName(NULL, buffer2, 2048)+"\\"+r1;<br />
Icon=r1+"\\book.ico" ;<br />
retval = Associate_File(".ccc", app_path,exten,"My own extension",Icon);<br />
AfxMessageBox(("Associated the file extension .ccc with this application!"));<br />
<br />
}
maybe there is something wrong with the type conversion....right
i think iam using UNICODE
thank u
|
|
|
|
|
First of all, you aren't already using the functions that I've provided via my first reply in this thread.
You should find them and copy&paste to your source file before the line void CForm1::OnCommand1().
Then, replace that function with the one below.
void CForm1::OnCommand1()
{
CComVariant retval;
CString exten="ccc_ext";
CString app_path = GetExeName();
CString Icon = GetExeFolder() + "\\book.ico";
retval = Associate_File(".ccc", app_path, exten, "My own extension", Icon);
AfxMessageBox(("Associated the file extension .ccc with this application!"));
}
I didn't want to post whole Associate_File() function that might mess up the board.
So, please find and replace all commented lines below with uncommented ones in Associate_File() function.
lRtn = RegSetValueExA(hKey, "", 0, REG_SZ, (LPBYTE)(LPCTSTR)Identifier, lsize);
lRtn = RegSetValueExA(hKey, "", 0, REG_SZ, (LPBYTE)(LPCTSTR)Description, lsize);
lRtn = RegSetValueExA(hKey, "", 0, REG_SZ, (LPBYTE)(LPCTSTR)Icon, lsize);
commandline = '\"' + Application + "\" \"%1\"";
lRtn = RegSetValueExA(hKey, "", 0, REG_SZ, (LPBYTE)(LPCTSTR)commandline, lsize);
It worked well in my system.
BTW, strings are not UNICODE.
|
|
|
|
|
IT WORKED
Iam reeeeealy thankful to u
i cant really thank u enough
THANK U
|
|
|
|
|
You're welcome.
|
|
|
|
|
lahom wrote: but with no directory shown in the right pane of regedit
Do you mean directory part of the fully qualified pathname?
like "C:\some.exe" or just "some.exe" for the action command.
|
|
|
|
|
Well this code is for vb but do you want to concatenate strings?
|
|
|
|
|
Hi, I'm beginner. I tried run project (http://opensteer.sourceforge.net/[^]). There is a main program and a few ready plugins. I compiled and run *.exe, but when I was switching plugins, traying run the last one (The most and only one important to me) "soccer" I had a message box:
------------
Microsoft Visual C++ Debug Library
Debug Assertion Failed!
Program: E:\opensteer\win32\bin\OpenSterDemo_d.exe
File: c:\progeam files\microsoft visual studio 8\vc\include\vector
Line: 1463
Expression: vector<bool> iterator not dereferencable
For information on how your program can cause an asseration
failure, see the Visual C++ documentation on asserts.
-------------
Could anybody help me ? please....
regards, Daniel.
PS: If something, maybe My english, is not understable I can try write in other way.
thx
|
|
|
|
|
This is not exactly a programming question. You should ask for help in the stree forum[^].
-Saurabh
|
|
|
|
|
I know that OpenSterr has own forum, but here are more people and... very smart
If, however, somebody could tell me something important, i'll be grateful.
Btw. after this msg. when I click IGNORE, I've last msg.:
//after choose IGNORE in msg box, next:
Microsoft Visual C++ Debug Library
Debug Assertion Failed!
Program: E:\opensteer\win32\bin\OpenSterDemo_d.exe
File: c:\progeam files\microsoft visual studio 8\vc\include\vector
Line: 1463
Expression: ("Standard C++ Libraries Out of Range", 0)
For information on how your program can cause an asseration
failure, see the Visual C++ documentation on asserts.
Thx anyway, BR.
Daniel.
|
|
|
|
|
What I need is very simple, copy some file to a directory where the application is.
|
|
|
|
|