|
bkelly13 wrote: open a DOS CMD window DOS is long dead; it's just a command window these days. You can do this via the CreateProcess [^] function in Windows.
|
|
|
|
|
See here and here.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
thanks for the links.
No, DOS is not dead. There are still some things to do with command line. Power Shell is a supercharged DOS. It can do much that the various Unix/Linux scripts do. I did some more searching and remembering. Now I have concluded that using Expect to drive this command line application is probably the text way. ExpectTk is probably even better. It will be better and easier to develop than a C++ solution.
Thanks for taking the time to read and respond.
Thanks for your time
If you work with telemetry, please check this bulletin board: http://www.bkelly.ws/irig_106/
|
|
|
|
|
To be exact, DOS is a operation system, and command line in windows is just a application, we call it console.
You can use GetStdHandle to get the standard output in a running GUI application, or use CreateProcess to spawn a process and redirect it's output to do the same thing.
|
|
|
|
|
Hi to all. I'm not very good at English, so be lenient. I am a beginner in MFC. I created a tab control which uses dialogs using MFC dialog base. I created clases for each dialog. Iwould like to know how to retrieve the value of an edit box located in my class OngletOne with the class MainWinDlg
class OngletOne : public CDialogEx
{
DECLARE_DYNAMIC(OngletOne)
public:
OngletOne(CWnd* pParent = NULL); virtual ~OngletOne();
enum { IDD = IDD_FORMVIEW };
protected:
void Initi();
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP()
public:
CEdit m_nom;
};
IMPLEMENT_DYNAMIC(OngletOne, CDialogEx)
OngletOne::OngletOne(CWnd* pParent )
: CDialogEx(OngletOne::IDD, pParent)
{
}
OngletOne::~OngletOne()
{
}
void OngletOne::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, m_nom);
}
BEGIN_MESSAGE_MAP(OngletOne, CDialogEx)
ON_EN_CHANGE(IDC_EDIT1, &OngletOne::OnEnChangeEdit1)
END_MESSAGE_MAP()
void OngletOne::Initi()
{
m_nom.LimitText(25);
}
BOOL OngletOne::OnInitDialog()
{
CDialogEx::OnInitDialog();
Initi();
return TRUE; }
In my MainWinDlg, I do this:
OngletOne *Onglet1;
CString edit;
Onglet1 = new OngletOne;
OngletOne->GetDlgItemText(IDC_EDIT1, edit);
MessageBox(edit,0,0);
BUT IT SHOW NOTHING.
PLEASE I NEED HELP.
modified 20-Mar-14 4:37am.
|
|
|
|
|
Well, since you're using a CEdit anyway, why not use one of his own methods to get the text:
OngletOne *Onglet1;
CString edit;
Onglet1 = new OngletOne;
OngletOne->m_nom.GetLine(0, edit);
MessageBox(edit,0,0);
Edit: I also just noticed that you call new and never actually "create" the dialog. You have to create it or else the windows don't really exist (so when you ask for values inside the windows, well, you either get nothing, an error, or a crash). See CDialog::Create() for a modeless dialog or a CDialog::DoModal() for a modal dialog.
|
|
|
|
|
I did this:
OngletOne *Onglet1;
CString edit;
Onglet1 = new OngletOne;
Onglet1->Create(IDD_FORMVIEW, this);
Onglet1->m_nom.GetLine(0, edit);
MessageBox(edit,0,0);
But it didn't work.
|
|
|
|
|
Fawaz Ajani wrote: But it didn't work. You need to look at what you are doing here, you create the dialog and immediately try to capture some data before the edit control has received any information. Try stepping through your code with the debugger to see exactly what is going on and what are the values of all the varibles at each stage. You may like to work through this sample[^] to see how it should be done.
|
|
|
|
|
It works!!!
thanks!!!
god bless you!!!!
|
|
|
|
|
You are welcome; good luck with the rest of your development.
|
|
|
|
|
thanks!!!
|
|
|
|
|
I agree with what Richard said, you just created the controls, it's probably blank.
|
|
|
|
|
I see. I did it. it work now!
|
|
|
|
|
BTW, your example (new,create, and grab the value) would work correctly upon create if you filled in a default value within the OnInitDialog() call of the dialog that owns the control. When working with dialogs, OnInitDialog() is the appropriate place to fill in controls with default values.
|
|
|
|
|
I am getting the following error on the following code:
Note: including file: g:\src\shared\inc\citrix\icaid.h
114>g:\src\inc\engtypes.h(49): warning C4091: 'typedef ' : ignored on left of 'char' when no variable is declared [g:\src\pal\ctxdvc\msbuild.ctxdvc.proj]
Adding to warn data CtxMSBuild.utility.DependencyData
114>g:\src\inc\engtypes.h(49): error C2143: syntax error : missing ';' before 'constant' [g:\src\pal\ctxdvc\msbuild.ctxdvc.proj]
114>g:\src\inc\engtypes.h(49): error C2059: syntax error : 'constant' [g:\src\pal\ctxdvc\msbuild.ctxdvc.proj]
<pre lang="c++">
typedef CHAR DOSFILENAME [ DOSFILENAME_LENGTH + 1 ];
typedef CHAR DESCRIPTION [ DESCRIPTION_LENGTH + 1 ];
typedef CHAR FRIENDLYNAME [ FRIENDLYNAME_LENGTH + 1 ];
typedef CHAR VERYLARGENAME [ VERYLARGENAME_LENGTH + 1 ];
typedef CHAR PROGRAMGROUP [ PROGRAMGROUP_LENGTH + 1 ];
typedef CHAR NAMEENUMERATOR [ NAMEENUMERATOR_LENGTH + 1 ];
typedef CHAR NAMERESOLVER [ NAMERESOLVER_LENGTH + 1 ];
typedef CHAR TRANSPORTNAME [ TRANSPORTNAME_LENGTH + 1 ];
typedef CHAR ENCRYPTIONLEVEL [ ENCRYPTIONLEVEL_LENGTH + 1 ];
typedef CHAR EMULATIONNAME [ EMULATIONNAME_LENGTH + 1 ];
typedef CHAR CLIENTNAME [ CLIENTNAME_LENGTH + 1 ];
typedef CHAR CLIENTSN [ CLIENTSN_LENGTH + 1 ];
typedef CHAR DOMAIN [ DOMAIN_LENGTH + 1 ];
typedef CHAR USERNAME [ USERNAME_LENGTH + 1 ];
typedef CHAR PASSWORD [ PASSWORD_LENGTH + 1 ];
typedef CHAR ENCRYPTEDPASSWORD[ ENCRYPTEDPASSWORD_LENGTH + 1 ];
typedef CHAR DIRECTORY [ DIRECTORY_LENGTH + 1 ];
typedef CHAR INITIALPROGRAM [ INITIALPROGRAM_LENGTH + 1 ];
typedef CHAR ADDRESS [ ADDRESS_LENGTH + 1 ];
typedef CHAR DEVICENAME [ DEVICENAME_LENGTH + 1 ];
typedef CHAR BAUD [ BAUD_LENGTH + 1 ];
typedef CHAR MODEM [ MODEM_LENGTH + 1 ];
typedef CHAR MODEMINIT [ MODEMINIT_LENGTH + 1 ];
typedef CHAR MODEMINITSTRING [ MODEMINITSTRING_LENGTH + 1 ];
typedef CHAR KEYBOARDLAYOUT [ KEYBOARDLAYOUT_LENGTH + 1 ];
typedef CHAR KEYBOARDTYPE [ KEYBOARDTYPE_LENGTH + 1 ];
typedef CHAR HOTKEYNAME [ HOTKEYNAME_LENGTH + 1 ];
typedef CHAR DIALINGLOCATION [ DIALINGLOCATION_LENGTH + 1 ];
typedef CHAR DIALINGPREFIX [ DIALINGPREFIX_LENGTH + 1 ];
typedef CHAR DIALPROPENTRY [ DIALPROPENTRY_LENGTH + 1 ];
typedef CHAR DIALCOUNTRY [ DIALCOUNTRY_LENGTH + 1 ];
typedef CHAR FILEPATH [ FILEPATH_LENGTH + 1 ];
</pre>
The line it is actually complaining about is typedef for DOMAIN. I have checked and DOMAIN_LENGTH is defined in a header file that is included by the header file with the above code. So is CLIENTSN_LENGTH.
Also it of interest to note that this code would compile under VS2008 and I am attempting to compile it with 2013.
|
|
|
|
|
Comment out the line with DOMAIN, and see if the error goes away. If not, then keep commenting out lines until you narrow it down.
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
If I comment out that line, then the error does go away.
|
|
|
|
|
That specific error goes away or it compiles all the way through without errors? ...because if it compiles all the way without errors, then that is where the error is, if it just gives you a different error, then it may still be the original error, it may just be that the error message is misguiding you.
|
|
|
|
|
Make sure you're not conflicted in the namespace. All capital definitions are used for macros a lot, so you may be conflicting with a macro. Rename your type and length variable to something else and see if it clears the problem.
|
|
|
|
|
Thanks everyone for the help. I did turn out to be a macro conflict.
|
|
|
|
|
Don't forget to upvote...
I would say to also accept the answer but I'm even sure if you can accept a solution in the forums.
In any case, glad you found your issue. I would also consider changing those from all caps since it is the common way of labeling macros, although since you're aware of the possible issue, you should know to hold that suspect in the future.
|
|
|
|
|
Dear all:
I use winIo.dll with my project, when I call InstallWinIoDriver function, it always return false, but my application still work,
What happened? There are source code below
bool _stdcall InstallWinIoDriver(PWSTR pszWinIoDriverPath, bool IsDemandLoaded)
{
SC_HANDLE hSCManager;
SC_HANDLE hService;
RemoveWinIoDriver();
hSCManager = OpenSCManager(NULL, NULL,
SC_MANAGER_ALL_ACCESS);
if(hSCManager)
{
hService = CreateService(hSCManager, L"WINIO", L"WINIO",
SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, (IsDemandLoaded
== true) ? SERVICE_DEMAND_START : SERVICE_SYSTEM_START,
SERVICE_ERROR_NORMAL, pszWinIoDriverPath, NULL, NULL, NULL,
NULL, NULL);
CloseServiceHandle(hSCManager);
if(hService == NULL)
return false; }
else
return false; CloseServiceHandle(hService); return true; }
Thanks for your help, Victor
|
|
|
|
|
I have no idea really. But it's always useful to have some trace-code that prints the result of GetLastError() and FormatMessage() . Something like:
<br />
<small>MY_TRACE (("CreateService() failed; %s\n", my_strerror(GetLastError())));</small><br />
-- Gisle V.
|
|
|
|
|
Hmmm,
Could be that the CreateService function[^] is returning either ERROR_DUPLICATE_SERVICE_NAME or maybe ERROR_SERVICE_EXISTS.
As previously stated GetLastError[^] is your friend.
cedricvictor wrote: but my application still work,
Keep in mind that if you do not have source code for winIo.dll ... it could also be installing the service.
Best Wishes,
-David Delaune
|
|
|
|
|
Dear Randor:
You are right. In other function, the service is exist.
So the function always return false.
Thank for your help, Victor
|
|
|
|