|
Does anyone else have a class that you can read 64bit keys remotely? It has to be possible to be able to do that before .net 4.0 ???
|
|
|
|
|
Here is the closest I could get, I cannot figure out how to convert "int ret" to a "UIntPtr inHive", and so I am not able to get any further or test.
What do you think?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Windows.Forms;
namespace Updator
{
class _64to32bit3
{
public enum RegSAM
{
QueryValue = 0x0001,
SetValue = 0x0002,
CreateSubKey = 0x0004,
EnumerateSubKeys = 0x0008,
Notify = 0x0010,
CreateLink = 0x0020,
WOW64_32Key = 0x0200,
WOW64_64Key = 0x0100,
WOW64_Res = 0x0300,
Read = 0x00020019,
Write = 0x00020006,
Execute = 0x00020019,
AllAccess = 0x000f003f
}
[DllImport("Advapi32.dll")]
static extern uint RegOpenKeyEx(
UIntPtr hKey,
string lpSubKey,
uint ulOptions,
int samDesired,
out int phkResult);
[DllImport("Advapi32.dll")]
static extern uint RegCloseKey(int hKey);
[DllImport("advapi32.dll", EntryPoint = "RegQueryValueEx")]
public static extern int RegQueryValueEx(
int hKey,
string lpValueName,
int lpReserved,
ref RegistryValueKind lpType,
StringBuilder lpData,
ref uint lpcbData);
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, EntryPoint = "RegQueryValueEx")]
private static extern int RegQueryValueEx(
int hKey,
string lpValueName,
int lpReserved,
ref RegistryValueKind lpType,
[Out] byte[] lpData,
ref uint lpcbData);
[DllImport("advapi32")]
static extern int RegConnectRegistry(string machine, UIntPtr hKey, out
IntPtr pRemKey);
[DllImport("advapi32")]
static extern int RegCloseKey(IntPtr hKey);
[DllImport("advapi32")]
static extern int RegSaveKey(IntPtr hKey, string fileout, IntPtr
secdesc);
const uint HKEY_CLASSES_ROOT = 0x80000000;
const uint HKEY_CURRENT_USER = 0x80000001;
const uint HKEY_LOCAL_MACHINE = 0x80000002;
public static void reg64reader()
{
UIntPtr key = new UIntPtr(HKEY_LOCAL_MACHINE);
IntPtr remKey;
int ret = RegConnectRegistry("SERVERNAME", key, out remKey);
GetRegKey64(ret, @"SOFTWARE\Microsoft\DirectX", RegSAM.WOW64_64Key, "Version");
MessageBox.Show(GetRegKey64(ret, @"SOFTWARE\Microsoft\DirectX", RegSAM.WOW64_64Key, "Version").ToString());
RegCloseKey(remKey);
}
static public string GetRegKey64(UIntPtr inHive, String inKeyName, RegSAM in32or64key, String inPropertyName)
{
int hkey = 0;
try
{
uint lResult = RegOpenKeyEx(inHive, inKeyName, 0, (int)RegSAM.QueryValue | (int)in32or64key, out hkey);
if (0 != lResult) return null;
RegistryValueKind lpType = 0;
uint lpcbData = 1024;
StringBuilder strBuffer = new StringBuilder(1024);
RegQueryValueEx(hkey, inPropertyName, 0, ref lpType, strBuffer, ref lpcbData);
string value = strBuffer.ToString();
return value;
}
finally
{
if (0 != hkey) RegCloseKey(hkey);
}
}
}
}
|
|
|
|
|
How does this code look to everyone?
private void button6_Click(object sender, EventArgs e)
{
string result = _64to32bit.reg64reader("server name", "hive", @"key path", "key name");
MessageBox.Show(result);
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Windows.Forms;
namespace Updator
{
class _64to32bit
{
public enum RegSAM
{
QueryValue = 0x0001,
SetValue = 0x0002,
CreateSubKey = 0x0004,
EnumerateSubKeys = 0x0008,
Notify = 0x0010,
CreateLink = 0x0020,
WOW64_32Key = 0x0200,
WOW64_64Key = 0x0100,
WOW64_Res = 0x0300,
Read = 0x00020019,
Write = 0x00020006,
Execute = 0x00020019,
AllAccess = 0x000f003f
}
[DllImport("Advapi32.dll")]
static extern uint RegOpenKeyEx(
UIntPtr hKey,
string lpSubKey,
uint ulOptions,
int samDesired,
out int phkResult);
[DllImport("Advapi32.dll")]
static extern uint RegCloseKey(int hKey);
[DllImport("advapi32.dll", EntryPoint = "RegQueryValueEx")]
public static extern int RegQueryValueEx(
int hKey,
string lpValueName,
int lpReserved,
ref RegistryValueKind lpType,
StringBuilder lpData,
ref uint lpcbData);
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, EntryPoint = "RegQueryValueEx")]
private static extern int RegQueryValueEx(
int hKey,
string lpValueName,
int lpReserved,
ref RegistryValueKind lpType,
[Out] byte[] lpData,
ref uint lpcbData);
[DllImport("advapi32")]
static extern int RegConnectRegistry(string machine, UIntPtr hKey, out
IntPtr pRemKey);
[DllImport("advapi32")]
static extern int RegCloseKey(IntPtr hKey);
[DllImport("advapi32")]
static extern int RegSaveKey(IntPtr hKey, string fileout, IntPtr
secdesc);
const uint HKEY_CLASSES_ROOT = 0x80000000;
const uint HKEY_CURRENT_USER = 0x80000001;
const uint HKEY_LOCAL_MACHINE = 0x80000002;
const uint HKEY_USERS = 0x80000003;
const uint HKEY_CURRENT_CONFIG = 0x80000005;
const uint HKEY_DYN_DATA = 0x80000006;
const uint HKEY_PERFORMANCE_DATA = 0x80000007;
public static string reg64reader(string serverName, string hive, string keyPath, string stringValue)
{
uint hiveConst = HKEY_LOCAL_MACHINE;
switch (hive)
{
case "hkcr":
hiveConst = HKEY_CLASSES_ROOT;
break;
case "hkey_classes_root":
hiveConst = HKEY_CLASSES_ROOT;
break;
case "HKCR":
hiveConst = HKEY_CLASSES_ROOT;
break;
case "HKEY_CLASSES_ROOT":
hiveConst = HKEY_CLASSES_ROOT;
break;
case "hkcu":
hiveConst = HKEY_CURRENT_USER;
break;
case "hkey_current_user":
hiveConst = HKEY_CURRENT_USER;
break;
case "HKCU":
hiveConst = HKEY_CURRENT_USER;
break;
case "HKEY_CURRENT_USER":
hiveConst = HKEY_CURRENT_USER;
break;
case "hklm":
hiveConst = HKEY_LOCAL_MACHINE;
break;
case "hkey_local_machine":
hiveConst = HKEY_LOCAL_MACHINE;
break;
case "HKLM":
hiveConst = HKEY_LOCAL_MACHINE;
break;
case "HKEY_LOCAL_MACHINE":
hiveConst = HKEY_LOCAL_MACHINE;
break;
case "hku":
hiveConst = HKEY_USERS;
break;
case "hkey_users":
hiveConst = HKEY_USERS;
break;
case "HKU":
hiveConst = HKEY_USERS;
break;
case "HKEY_USERS":
hiveConst = HKEY_USERS;
break;
case "hkcc":
hiveConst = HKEY_CURRENT_CONFIG;
break;
case "hkey_current_config":
hiveConst = HKEY_CURRENT_CONFIG;
break;
case "HKCC":
hiveConst = HKEY_CURRENT_CONFIG;
break;
case "HKEY_CURRENT_CONFIG":
hiveConst = HKEY_CURRENT_CONFIG;
break;
case "hkdd":
hiveConst = HKEY_DYN_DATA;
break;
case "hkey_dyn_data":
hiveConst = HKEY_DYN_DATA;
break;
case "HKDD":
hiveConst = HKEY_DYN_DATA;
break;
case "HKEY_DYN_DATA":
hiveConst = HKEY_DYN_DATA;
break;
case "hkpd":
hiveConst = HKEY_PERFORMANCE_DATA;
break;
case "hkey_performance_data":
hiveConst = HKEY_PERFORMANCE_DATA;
break;
case "HKPD":
hiveConst = HKEY_PERFORMANCE_DATA;
break;
case "HKEY_PERFORMANCE_DATA":
hiveConst = HKEY_PERFORMANCE_DATA;
break;
default:
MessageBox.Show("Default");
break;
}
UIntPtr key = new UIntPtr(hiveConst);
IntPtr remKey;
int ret = RegConnectRegistry(serverName, key, out remKey);
UIntPtr remKeyUIntPtr = unchecked((UIntPtr)(long)(ulong)remKey);
string result = GetRegKey64(remKeyUIntPtr, keyPath, RegSAM.WOW64_64Key, stringValue);
RegCloseKey(remKey);
return (result);
}
static public string GetRegKey64(UIntPtr inHive, String inKeyName, RegSAM in32or64key, String inPropertyName)
{
int hkey = 0;
RegistryKey remoteKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "ph-mb-05");
try
{
uint lResult = RegOpenKeyEx(inHive, inKeyName, 0, (int)RegSAM.QueryValue | (int)in32or64key, out hkey);
if (0 != lResult) return null;
RegistryValueKind lpType = 0;
uint lpcbData = 1024;
StringBuilder strBuffer = new StringBuilder(1024);
RegQueryValueEx(hkey, inPropertyName, 0, ref lpType, strBuffer, ref lpcbData);
string value = strBuffer.ToString();
return value;
}
finally
{
if (0 != hkey) RegCloseKey(hkey);
}
}
}
}
|
|
|
|
|
Think it would be best if you make a new question of this.
I was able to find some links for you, but for this you need some more experienced help I think.
0100000101101110011001000111001011101001
|
|
|
|
|
Ok, well thank you for your help in this
|
|
|
|
|
The CodeDOM namespace is useful for dynamically generating code and compiling it.
But I need a slightly different thing: I'd like to read existing source code files, find all methods/properties/constructors in it, and add some more logging to the functions. I.e. I'd like to add a call to our logging function automatically as first line to every function, and - if possible - automatically add another call to the logging function before each return statement/end of function. And then save the changed source code file - for "normal" use with Visual Studio for further development.
There's an ICodeParser interface in CodeDOM - but no implementation seems to exist:
CSharpCodeProvider csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
ICodeParser parser = csc.CreateParser();
and parser is null.
CSharpCodeProvider csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
TextReader reader = new StreamReader(@"C:\Path\To\MySource.cs");
CodeCompileUnit ccu = csc.Parse(reader);
throws an Exception: this function is not supported.
An old article can be found here on code project - but its code fails already when reading following line:
public sealed partial class MyClass : System.Windows.Forms.Form
Does .NET provide some classes for that? Or are there some tools already available? I do not want to write my own source code parser.
|
|
|
|
|
|
Thanks for this nice idea.
When I read about Aspect Oriented Programming some time ago, it looked just like a new fashion. But now it seems to be useful.
|
|
|
|
|
hi folks,
i have a list of bitmap image files, which i want to convert into a single video file. i want to do this using visual studio C sharp. Can someone please help me on this? Any suggestions,sample code, links would be helpful.
Thanks in advance.
hema.
|
|
|
|
|
|
Hi,
I'd like to get access to file icon of any application. The Problem is, I'd like to have the one which has been generated as preview (Like a icon of a pptx (PowerPoint) file which is the first slide or like a video which has the first frame as icon).
Does anyone know how to access these kind of icons?
|
|
|
|
|
Using the Windows API Pack[^], you can do:
Image img = ShellFile.FromFilePath(@"C:\foo.pptx").Thumbnail.BitmapSource;
/ravi
|
|
|
|
|
Thank you very much. Only thing about your code is, that you can't cast a BitmapSource to a Image.
So I changed the code to this:
Image img = ShellFile.FromFilePath("C:\\foo.pptx").Thumbnail.Bitmap;
|
|
|
|
|
Sorry for the hasty typing!
/ravi
|
|
|
|
|
I have a simple Employee Class as follows:
I want to create a new Employee object from a different Class having Main
Can I return the Complete Employee object from here when Main class uses GetEmployee method.
The code below errors out saying variable e in last method below is undefined
namespace TestEmployee
{
class Employee
{
int eId;
string eName;
double age;
public Employee(int i, string n, double a)
{
eId = i;
eName = n;
age = a;
}
public Employee()
{
eId = 1105;
eName = "Peter Cava";
age = 32 ;
}
public Employee GetEmployee()
{
Employee e;
e.eId = this.eId;
e.eName = this.eName;
e.eId = this.eId;
return e;
}
}
}
|
|
|
|
|
Employee e <big>= new Employee()</big>;
(Though I don't know why you're cloning the Employee.)
|
|
|
|
|
If you want to create a new employee from your main method you should just use:
Employee myEmployee = new Employee();
if you really want to have a cloned object you should have a look at the Interface ICloneable for implementing the right methods.
|
|
|
|
|
thanks for the reply
I did create a new Employee Object
class Employee
{
int eId;
string eName;
double age;
public Employee(int i, string n, double a)
{
eId = i;
eName = n;
age = a;
}
public Employee()
{
}
public Employee GetEmployee()
{
Employee e = new Employee();
e.eId = this.eId;
e.eName = this.eName;
e.age = this.age;
return e;
}
}
and calling this from a form where I give the 3 inputs and want to see it in new set of fields
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int i1 = Convert.ToInt32(textBox1.Text);
string nm = textBox2.Text;
double d2 = Convert.ToDouble(textBox3.Text);
Employee em = new Employee(i1, nm, d2);
em.GetEmployee();
textBox5.Text = em.GetEmployee?? for Employee id from em object
textBox6.Text = em.GetEmployee?? for Employee name from em object
textBox6.Text = em.GetEmployee?? for Employee age from em object
}
|
|
|
|
|
Well the problem is that all your variables in the employee class don't have public, or private set. In that case they will be private and only be seen within the class Employee.
To manage that the correct way, C# offers you the posibility to create so called "Properties".
I've created properties as you see in the code of the class.
public class Employee
{
public int EId{get;set;}
public string EName{get;set;}
public double Age{get;set;
public Employee(int i, string n, double a)
{
eId = i;
eName = n;
age = a;
}
public Employee()
{
}
}
In the Form1 class you can access the properties pretty simple by creating a new Employee with Employee em = new Employee();
and access each property like: em.Name
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int i1 = Convert.ToInt32(textBox1.Text);
string nm = textBox2.Text;
double d2 = Convert.ToDouble(textBox3.Text);
Employee em = new Employee(i1, nm, d2);
textBox5.Text = em.EId.ToString();
textBox6.Text = em.EName;
textBox6.Text = em.Age.ToString();
}
Hope this helps.
|
|
|
|
|
Oh My, cant believe I dropped the ball on private and public declaration.
Thanks very much for the details and how to use the properties.
One last question please
in the Employee class, if I have to return as an object I need to have a variable of the class and do a new, right like in
Employee e = new Employee(); in code below.
class Employee
{
public int eId;
public string eName;
public double age;
public Employee(int i, string n, double a)
{
eId = i;
eName = n;
age = a;
}
public Employee()
{
}
public Employee GetEmployee()
{
Employee e = new Employee();
e.eId = this.eId;
e.eName = this.eName;
e.eId = this.eId;
return e;
}
|
|
|
|
|
You should not expose the class variables as public. Rather good design uses property accessors. That way any logic that may need to be executed when a property is set or accessed will be executed.
You don't always need an instance of a class to access it's properties or methods.
public class Employee
{
private static int m_Id;
public static Foo()
{
}
public static int Id{get; set;}
}
int id = Employee.Id;
Employee.Foo();
Static methods and properties are not bound to an instance of a class. The Factory pattern quite often uses this to create instances
public class Employee
{
public static Employee CreateEmployee()
{
return new Employee();
}
}
Employee e = Employee.CreateEmployee();
No comment
|
|
|
|
|
Thanks very much Mark and Bob for the response. I think I am slowly getting it.
Thanks, Ravi
|
|
|
|
|
I don't understand what the purpose of GetEmployee is. It is functionally doing a clone but that seems to be unnecessary.
|
|
|
|
|
Hi,
Just creating an Instance of Employee Class......
Thanks & Regards
Arya1685
P Before printing think about your responsibility & commitment with the Environment! ü
|
|
|
|
|
when login a page then if invalid pasword so only that particular part is refershed not whole page
|
|
|
|
|